package com.tanguy.driver.utlis.extend

import com.amap.api.location.AMapLocation
import com.amap.api.location.AMapLocationClient
import com.amap.api.location.AMapLocationClientOption
import com.tanguy.driver.App.Companion.app

/**
 * Created by dab on 2017/11/20 0020 17:12
 * 定位(单次,定位完成就取消了)
 */
fun location(callback: (aMapLocation: AMapLocation?) -> Unit) {
//        AMapLocationClient.setApiKey("d8c68da6fb4cf8de59f1bb17025335b2")
    //初始化定位
    val mLocationClient = AMapLocationClient(app)
    val mLocationOption = AMapLocationClientOption()
    //设置定位模式为AMapLocationMode.Hight_Accuracy，高精度模式。
    mLocationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
    //获取一次定位结果：
    mLocationOption.isOnceLocation = true
    //获取最近3s内精度最高的一次定位结果：
    //设置setOnceLocationLatest(boolean b)接口为true，启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true，setOnceLocation(boolean b)接口也会被设置为true，反之不会，默认为false。
    mLocationOption.isOnceLocationLatest = true
    //设置定位回调监听
    //给定位客户端对象设置定位参数
    mLocationClient.setLocationOption(mLocationOption)
    //启动定位
    mLocationClient.startLocation()
    mLocationClient.setLocationListener { aMapLocation ->
        if (aMapLocation != null && aMapLocation.errorCode == 0) {
            loge(aMapLocation.toStr())
            callback.invoke(aMapLocation)
        } else {
            callback.invoke(null)
            loge("定位失败")

        }
        mLocationClient.stopLocation()
    }
}

/**
 * 连续定位(默认未启动定位)
 */
fun location(millisecond: Long, callback: (aMapLocation: AMapLocation?, aMapLocationClient: AMapLocationClient) -> Unit) {
//        AMapLocationClient.setApiKey("d8c68da6fb4cf8de59f1bb17025335b2")
    //初始化定位
    val mLocationClient = AMapLocationClient(app)
    val mLocationOption = AMapLocationClientOption()
    //设置定位模式为AMapLocationMode.Hight_Accuracy，高精度模式。
    mLocationOption.locationMode = AMapLocationClientOption.AMapLocationMode.Hight_Accuracy
    //获取一次定位结果：
    mLocationOption.isOnceLocation = false
    //获取最近3s内精度最高的一次定位结果：
    //设置setOnceLocationLatest(boolean b)接口为true，启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true，setOnceLocation(boolean b)接口也会被设置为true，反之不会，默认为false。
    mLocationOption.isOnceLocationLatest = false
    //设置定位间隔,单位毫秒,默认为2000ms
    mLocationOption.interval = if (millisecond <= 2000) 2000 else millisecond
    //给定位客户端对象设置定位参数
    mLocationClient.startLocation()
    mLocationClient.setLocationOption(mLocationOption)
    mLocationClient.setLocationListener { aMapLocation ->
        if (aMapLocation != null && aMapLocation.errorCode == 0) {
            callback.invoke(aMapLocation, mLocationClient)
        } else {
            callback.invoke(null, mLocationClient)
            loge("定位失败")
        }
    }
}